<?php

session_start();
require_once '../model/EspacoCultural.php';
require_once '../model/Endereco.php';
require_once '../model/Cmdo.php';
require_once '../model/OM.php';
require_once '../model/RM.php';
require_once '../model/TipoEspaco.php';
require_once '../model/Facilidade.php';
require_once '../model/EstadoEspaco.php';

class EspacoCulturalDLO {

    private $espacos;
    private static $espacoDLO;

    private function __construct() {
        
    }

    /**
     * @method EspacoCulturalDLO getInstance() para obter uma única instância do controlador
     * @return EspacoCulturalDLO
     */
    public static function getInstance() {
        if (!isset(self::$espacoDLO)) {
            if (!isset($_SESSION['espacoDLO'])) {
                $_SESSION['espacoDLO'] = serialize(new EspacoCulturalDLO());
            }
            self::$espacoDLO = unserialize($_SESSION['espacoDLO']);
        }
        return self::$espacoDLO;
    }

    public function cadastrar(&$area, &$bi, &$cod_cmdo, &$descricao, &$cadastro_dphcex, &$email, &$cod_estado_espaco, &$nome, &$cod_om, &$cod_rm, &$telefone, &$cod_tipo_espaco, &$logradouro, &$numero, &$cidade, &$estado, &$cep, &$bairro, &$complemento, &$cod_facilidade, &$cod_fonte_recursos, &$site, &$funcionamento) {
        $espaco = new EspacoCultural();
        $espaco->setEndereco($endereco);
        $espaco->setArea($area);
        $espaco->setBi($bi);
        $espaco->setCmdo(Cmdo::consultar($cod_cmdo));
        $espaco->setDescricao($descricao);
        $espaco->setCadastro_dphcex($cadastro_dphcex);
        $espaco->setEmail($email);
        $espaco->setEstado(EstadoEspaco::consultar($cod_estado_espaco));
        $espaco->setNome($nome);
        $espaco->setOm(OM::consultar($cod_om));
        $espaco->setRm(RM::consultar($cod_rm));
        $espaco->setTelefone($telefone);
        $espaco->setSite($site);
        $espaco->setFuncionamento($funcionamento);
        $espaco->setTipo(TipoEspaco::consultar($cod_tipo_espaco));
        $espaco->cadastrar();

        $endereco = new Endereco();
        $endereco->setBairro($bairro);
        $endereco->setCep($cep);
        $endereco->setCidade($cidade);
        $endereco->setComplemento($complemento);
        $endereco->setEstado($estado);
        $endereco->setLogradouro($logradouro);
        $endereco->setNumero($numero);
        $endereco->setEspaco($espaco);
        $endereco->cadastrar();
        
        $facilidades_str = explode(",",$cod_facilidade);
        $facilidades = array();
        foreach ($facilidades_str as $facilidade_str) {
            $facilidades[] = Facilidade::consultar($facilidade_str);
        }
        foreach ($facilidades as $facilidade) {
            $espaco->cadastrarFacilidade($facilidade);
        }
        
        $fontes_recursos_str = explode(",",$cod_fonte_recursos);
        $fontes_recursos = array();
        foreach ($fontes_recursos_str as $fonte_recursos_str) {
            $fontes_recursos[] = FonteRecursos::consultar($fonte_recursos_str);
        }
        foreach ($fontes_recursos as $fonte_recursos) {
            $espaco->cadastrarFonteRecursos($fonte_recursos);
        }
    }

    public function listar() {
        $result = &EspacoCultural::listar();
        $resultado = array();
        for ($i = 0; $i < sizeof($result); $i++) {
            $row = array();
            $row['cod_espaco'] = &$result[$i]->getCod_espaco();
            $row['nome'] = &$result[$i]->getNome();
            $resultado[$i] = &$row;
            unset($row);
        }
        return $resultado;
    }
    
    public function listarByNome($nome_espaco) {
        $result = &EspacoCultural::listarByNome($nome_espaco);
        $resultado = array();
        for ($i = 0; $i < sizeof($result); $i++) {
            $row = array();
            $row['cod_espaco'] = &$result[$i]->getCod_espaco();
            $row['nome'] = &$result[$i]->getNome();
            $resultado[$i] = &$row;
            unset($row);
        }
        return $resultado;
    }

    public function listarByCMDO(&$cmdo) {
        $result = &EspacoCultural::listarByCMDO($cmdo);
        $resultado = array();
        for ($i = 0; $i < sizeof($result); $i++) {
            $row = array();
            $row['cod_espaco'] = &$result[$i]->getCod_espaco();
            $row['nome'] = &$result[$i]->getNome();
            $resultado[$i] = &$row;
            unset($row);
        }
        return $resultado;
    }

    public function excluir(&$cod_espaco) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        if ($espaco->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $espaco->excluir();
        unset($this->espacos[$cod_espaco]);
        $_SESSION['espacoDLO'] = serialize($this);
    }

    public function validarCod_registro(&$cod_espaco, &$cod_registro) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        if ($espaco->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        return $espaco->validarCod_registro($cod_registro);
    }

    public function alterar(&$cod_espaco, &$campo_id, &$campo_valor) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        if ($espaco->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $result = $espaco->alterarCampo($campo_id, $campo_valor);
        $this->espacos[$cod_espaco] = &$espaco;
        $_SESSION['espacoDLO'] = serialize($this);
        return $result;
    }

    public function consultar(&$cod_espaco) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        $row['area'] = &$espaco->getArea();
        $row['bi'] = &$espaco->getBi();
        $row['descricao'] = &$espaco->getDescricao();
        $row['cadastro_dphcex'] = &$espaco->getCadastro_dphcex();
        $row['email'] = &$espaco->getEmail();
        $row['funcionamento'] = &$espaco->getFuncionamento();
        $row['site'] = &$espaco->getSite();
        $fontes = &$espaco->getFontes_recursos();
        $rowFontes = array();
        if (!empty($fontes)) {
            foreach ($fontes as $fonte) {
                $rowFonte['cod_fonte_recursos'] = &$fonte->getCod_fonte_recursos();
                $rowFonte['descricao'] = &$fonte->getDescricao();
                $rowFonte['valor'] = &$fonte->getValor();
                $rowFontes[] = &$rowFonte;
                unset($rowFonte);
            }
        }
        $row['fonte_recursos'] = &$rowFontes;
        $facilidades = &$espaco->getFacilidades();
        $rowFacilidades = array();
        if (!empty($facilidades)) {
            foreach ($facilidades as $facilidade) {
                $rowFacilidade['cod_facilidade'] = &$facilidade->getCod_facilidade();
                $rowFacilidade['descricao'] = &$facilidade->getDescricao();
                $rowFacilidade['parecer'] = &$facilidade->getParecer();
                $rowFacilidades[] = &$rowFacilidade;
                unset($rowFacilidade);
            }
        }
        $row['facilidades'] = &$rowFacilidades;
        $row['nome'] = &$espaco->getNome();
        $row['telefone'] = &$espaco->getTelefone();
        $tipo = &$espaco->getTipo();
        $rowTipo['cod_tipo_espaco'] = &$tipo->getCod_tipo_espaco();
        $rowTipo['descricao'] = &$tipo->getDescricao();
        $row['tipo'] = &$rowTipo;
        $rm = &$espaco->getRm();
        $rowRm['cod_rm'] = &$rm->getCod_rm();
        $rowRm['descricao'] = &$rm->getDescricao();
        $row['rm'] = &$rowRm;
        $estado = &$espaco->getEstado();
        $rowEstado['cod_estado_espaco'] = &$estado->getCod_estado_espaco();
        $rowEstado['descricao'] = &$estado->getDescricao();
        $row['estado_espaco'] = &$rowEstado;
        $cmdo = &$espaco->getCmdo();
        $rowCmdo['cod_cmdo'] = &$cmdo->getCod_cmdo();
        $rowCmdo['descricao'] = &$cmdo->getDescricao();
        $row['cmdo'] = &$rowCmdo;
        $om = &$espaco->getOm();
        $rowOm['cod_om'] = &$om->getCod_om();
        $rowOm['nome'] = &$om->getNome();
        $rowOm['sigla'] = &$om->getSigla();
        $row['om'] = &$rowOm;
        $endereco = &$espaco->getEndereco();
        $rowEndereco['logradouro'] = &$endereco->getLogradouro();
        $rowEndereco['numero'] = &$endereco->getNumero();
        $rowEndereco['cidade'] = &$endereco->getCidade();
        $rowEndereco['estado'] = &$endereco->getEstado();
        $rowEndereco['cep'] = &$endereco->getCep();
        $rowEndereco['bairro'] = &$endereco->getBairro();
        $rowEndereco['complemento'] = $endereco->getComplemento();
        $row['endereco'] = &$rowEndereco;
        $row['cod_espaco'] = &$espaco->getCod_espaco();
        $row['vinculado'] = &$espaco->isVinculado();
        return $row;
    }

    public function cadastrarFacilidade(&$cod_espaco, &$cod_facilidade, &$parecer) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        $facilidade = &Facilidade::consultar($cod_facilidade);
        $facilidade->setParecer($parecer);
        $this->espacos[$cod_espaco]->cadastrarFacilidade($facilidade);
        $_SESSION['espacoDLO'] = serialize($this);
    }

    public function alterarFacilidade(&$cod_espaco, &$cod_facilidade, &$parecer) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        $this->espacos[$cod_espaco]->alterarFacilidade($parecer, $cod_facilidade);
        $_SESSION['espacoDLO'] = serialize($this);
    }

    public function excluirFacilidade(&$cod_espaco, &$cod_facilidade) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        $this->espacos[$cod_espaco]->excluirFacilidade($cod_facilidade);
        $_SESSION['espacoDLO'] = serialize($this);
    }

    public function cadastrarFonteRecursos(&$cod_espaco, &$cod_fonte_recursos, &$valor) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        $fonte_recursos = &FonteRecursos::consultar($cod_fonte_recursos);
        $fonte_recursos->setValor($valor);
        $this->espacos[$cod_espaco]->cadastrarFonteRecursos($fonte_recursos);
        $_SESSION['espacoDLO'] = serialize($this);
    }

    public function alterarFonteRecursos(&$cod_espaco, &$cod_fonte_recursos, &$valor) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        $this->espacos[$cod_espaco]->alterarFonteRecursos($valor, $cod_fonte_recursos);
        $_SESSION['espacoDLO'] = serialize($this);
    }

    public function excluirFonteRecursos(&$cod_espaco, &$cod_fonte_recursos) {
        $espaco = null;
        if (isset($this->espacos[$cod_espaco])) {
            $espaco = &$this->espacos[$cod_espaco];
        } else {
            $espaco = &EspacoCultural::consultar($cod_espaco);
            $this->espacos[$cod_espaco] = &$espaco;
            $_SESSION['espacoDLO'] = serialize($this);
        }
        $this->espacos[$cod_espaco]->excluirFonteRecursos($cod_fonte_recursos);
        $_SESSION['espacoDLO'] = serialize($this);
    }

}

?>
